/*+----------+--------------------------------------------------+----------+
  + 15/06/98 +             EICDossi.h                           + Ver 1.00 +
  +----------+--------------------------------------------------+----------+
  +                                                                        +
  +    Ce fichier déclare les types généraux qui permettent de gérer un    +
  + dossier.                                                               +
  +------------------------------------------------------------------------+*/
#ifndef EICDossiH
#define EICDossiH

#if !defined(__BCPLUSPLUS__)
#define dateDOS date
#elif defined(_NO_VCL)
#define enm( enumType)   unsigned short
#pragma pack(1)
  struct dateDOS{
   unsigned char  m_j;
   unsigned char  m_m;
   unsigned short m_a;
  };
#pragma pack()
#else
#include <EICDOS.h>
#endif

// Forme juridique d'une entreprise
enum FORME_JURIDIQUE {
  FJ_INCONNUE = 0,
  FJ_EI       = 1,  /* Entreprise Individuelle  */
  FJ_SARL,    /* Société à Responsabilité Limitée */
  FJ_EURL,
  FJ_SA,      /* Société Anonyme   */
  FJ_SNC,
  FJ_SCS,
  FJ_SCA,
  FJ_SCI,     /* Société Civile Immobilière */
  FJ_ASSO,    /* Association loi 1901 */
  FJ_GIE,     /* Groupement Industriel Economique */
  FJ_SF,      /* Société de Fait   */
  FJ_EARL,
  FJ_GAEC,
  FJ_SCEA,
  FJ_SCP,     /*Société Civiles Professionnelles*/
  FJ_SAS,     /*Sociétés par Actions Simplifiées*/
  FJ_SCM,     /*Société Civile de Moyens*/
  FJ_CC,      /*Comptes de campagne*/

  FJ_FIRST = FJ_EI,
//  FJ_LAST = FJ_CC  supprimé pour la compile C
#define FJ_LAST 18
#define NB_FORME_JURIDIQUE (FJ_LAST - FJ_FIRST + 1)
 };
#define IS_VALID_FJ( eFJ) (((eFJ)>=FJ_FIRST)&&((eFJ)<=FJ_LAST))

// Régime d'Imposition d'une entreprise
enum REGIME_IMPOSITION {
  RI_INCONNU = 0,
  RI_IR      = 1,   /* Impôt sur le Revenu    */
  RI_IS,            /*  "    "  les Sociétés */

  RI_FIRST = RI_IR,
//  RI_LAST = RI_IS
#define RI_LAST 2
#define NB_REGIME_IMPOSITION (RI_LAST - RI_FIRST + 1)
 };
#define IS_VALID_RI( eRI) (((eRI)>=RI_FIRST)&&((eRI)<=RI_LAST))


// Catégorie d'imposition d'une entreprise
enum CATEGORIE_IMPOSITION {
  CI_INCONNUE = 0,
  CI_BIC      = 1, /* Bénéfice Insdustriel et Commercial */
  CI_BA,           /*  "     Agricole                    */
  CI_BNC,          /*  "     Non Commercial (Libéral)    */
  CI_RF,           /* Revenus fonciers (Association/SCI) */
  CI_2072,         /* Sociétés Civiles Immobilières      */
  CI_RGRE,         /* Régime de groupe - résultat d'ensemble */
  CI_ASSO_NL,      /* Association non lucrative */
  CI_2036,         /* Sociétés Civiles de Moyens */

  CI_FIRST = CI_BIC,
//  CI_LAST = CI_2036
#define CI_LAST 8
#define NB_CATEGORIE_IMPOSITION (CI_LAST - CI_FIRST + 1)
 };
#define IS_VALID_CI( eCI) (((eCI)>=CI_FIRST)&&((eCI)<=CI_LAST))

// Régime fiscal
enum REGIME_FISCAL {
  RF_INCONNU     = 0,
  RF_NORMAL      = 1,
  RF_SIMPLIFIE,
  RF_SUPER_SIMPLIFIE,

  RF_FIRST = RF_NORMAL,
//  RF_LAST = RF_SUPER_SIMPLIFIE
#define RF_LAST 3
#define NB_REGIME_FISCAL (RF_LAST - RF_FIRST + 1)
 };
#define IS_VALID_RF( eRF) (((eRF)>=RF_FIRST)&&((eRF)<=RF_LAST))


/*** Complement Régime fiscal: de droit/sur option ***/
enum COMPLMT_REGIME_FISCAL {
  CRF_INCONNU = 0,
  CRF_DE_DROIT = 1,
  CRF_SUR_OPTION,

  CRF_FIRST = CRF_DE_DROIT,
//  CRF_LAST = CRF_SUR_OPTION
#define CRF_LAST 2
#define NB_COMPLMT_REGIME_FISCAL (CRF_LAST - CRF_FIRST + 1)
 };
#define IS_VALID_CRF( eCRF) (((eCRF)>=CRF_FIRST)&&((eCRF)<=CRF_LAST))

/*** Régime du bénéfice ***/
enum REGIME_BENEFICE {
  RB_INCONNU      = 0,
  RB_CONSOLIDE   = 1,
  RB_INTEGRE,
  RB_DE_GROUPE,

  RB_FIRST = RB_CONSOLIDE,
//  RB_LAST = RB_DE_GROUPE
#define RB_LAST 3
#define NB_REGIME_BENEFICE (RB_LAST - RB_FIRST + 1)
 };
#define IS_VALID_RB( eRB) (((eRB)>=RB_FIRST)&&((eRB)<=RB_LAST))


/***************************************/
/*** Définitions de tailles usuelles ***/
/***************************************/
/*** Longueurs des données usuelles (en Nb de caract. significatifs) ***/
#define LEN_NO_COMPTE      13
#define LEN_NOM_DOSSIER    31
#define LEN_RAISON_SOCIALE LEN_NOM_DOSSIER
#define LEN_REFERENCE      20
#define LEN_COMPLEMENT_ADR 35
#define LEN_No_VOIE         5
#define LEN_Cmpl_No_VOIE    3     /* Bis/Ter... */
#define LEN_NOM_VOIE       35
#define LEN_BP              5
/* #define LEN_ADRESSE        31             Adresse complète = 2 x 31 */
#define LEN_CODE_POSTAL_ETRANGER     17
#define LEN_CODE_POSTAL     5
#define LEN_COMMUNE        31
#define LEN_TEL_FAX        17

#define LEN_NOM            LEN_NOM_DOSSIER
#define LEN_PRENOM         15


// Adresse
#pragma pack( 2)
typedef struct tagADRESSE {
  char szCmplAdr1[ LEN_COMPLEMENT_ADR + 1];   /* Ligne 1 complément d'adresse */
  char szCmplAdr2[ LEN_COMPLEMENT_ADR + 1];
  char szNoVoie[ LEN_No_VOIE + 1];
  char szCmplNoVoie[ LEN_Cmpl_No_VOIE + 1];   /* Bis/Ter/Qua... */
  char szNomVoie[ LEN_NOM_VOIE + 1];
  char szBP[ LEN_BP + 1];                          /* Boîte Postale */
  char szCP[ LEN_CODE_POSTAL + 1];            /* Code Postal */
  char szVille[ LEN_COMMUNE + 1];
  char szTel[ LEN_TEL_FAX + 1];
  char szFAX[ LEN_TEL_FAX + 1];
 } ADRESSE;
/*** Définition d'une adresse Etrangere ***/
typedef struct tagADRESSE_TDFC {
  char szCmplAdr1[ LEN_COMPLEMENT_ADR + 1];   /* Ligne 1 complément d'adresse */
  char szCmplAdr2[ LEN_COMPLEMENT_ADR + 1];
  char szNoVoie[ LEN_No_VOIE + 1];
  char szCmplNoVoie[ LEN_Cmpl_No_VOIE + 1];   /* Bis/Ter/Qua... */
  char szNomVoie[ LEN_NOM_VOIE + 1];
  char szBP[ 5 + 1];                          /* Boîte Postale */
  char szCP[ LEN_CODE_POSTAL_ETRANGER + 1];   /* Code Postal */
  char szVille[ LEN_COMMUNE + 1];
  char szTel[ LEN_TEL_FAX + 1];
  char szFAX[ LEN_TEL_FAX + 1];
  unsigned short ushCodePays;
 } ADRESSE_TDFC;
#pragma pack()

// Données administratives
#define STRUCT_DONNEES_ADM                                                                          \
  char szAdmRCS[ 15 + 1];            /* N° Registre du Commerce                               */    \
  char szAdmCleRCS[ 1 + 1];          /* Clé RCS                                               */    \
  char szAdmRM[ 9 + 1];              /* N°  Répertoire des metiers = Ville                    */    \
  char szAdmCleRM[ 2 + 1];           /* Clé     "       "    "     + Département (2 chiffres) */    \
  char szAdmNoCentreGestion[ 6 + 1]; /* N° Centre de Gestion                                  */    \
  char szAdmRecette[ 7 + 1];         /* Code recette */                                             \
  char szAdmNoDossier[ 6 + 1];                                                                      \
  char szAdmCle[ 2 + 1];                                                                            \
  char szAdmCM[ 1 + 1];              /* Code Chambre des Métiers */                                 \
  char szAdmOPT[ 1 + 1];             /* Code Option              */                                 \
  char szAdmCDI[ 2 + 1];                                                                            \
  char szAdmInsp[ 3 + 1];            /* N° d'Inspection */                                          \
  char szAdmRegime[ 3 + 1];                                                                         \
  char szSertARien[ 9 + 1]; 

#ifdef __BCPLUSPLUS__
#pragma pack( 2)
typedef struct tagDONNEES_ADM {
    STRUCT_DONNEES_ADM
 } DONNEES_ADM;
#pragma pack()
#endif

/***********************************/
/*** Définition d'une entreprise ***/
/***********************************/
/*** Diverses activités secondaires de l'entreprise ***/
#define DOS_ACTIVITE_SECONDAIRE1 0
#define DOS_ACTIVITE_SECONDAIRE2 1
#define DOS_NB_ACTIVITES         2 /* Nb activités secondaires différentes */

/*** Définition d'une entreprise ***/
#pragma pack( 2)
#ifdef __BCPLUSPLUS__
struct tagNOINTRACOMM{
    char sPrefixeIntracomm[ 4];                     /* Préfixe n° intracomm ( 2 char + 2 digit)      */
 /* char szSIRET[ 0];                                  N° SIRET (SIREN + NIC)                        */
    char sSIREN[ 9];                                /* N° SIREN                                      */
    char szNIC[ 5 + 1];                             /* N° NIC (Code établissement)                   */
   };                   //NoIntracomm;               /* N° intracommunautaire du dossier (Pref+SIRET) */
#else
#define tagNOINTRACOMM struct {                                                                             \
    char sPrefixeIntracomm[ 4];                     /* Préfixe n° intracomm ( 2 char + 2 digit)      */     \
 /* char szSIRET[ 0];                                  N° SIRET (SIREN + NIC)                        */     \
    char sSIREN[ 9];                                /* N° SIREN                                      */     \
    char szNIC[ 5 + 1];                             /* N° NIC (Code établissement)                   */     \
   }
#endif

typedef struct tagDONNEES_DOSSIER {
  char                 szNom[ LEN_NOM_DOSSIER + 1]; /* Nom entreprise                                 */
  char                 szPrenom[ LEN_PRENOM + 1];   /* Prénom entreprise (individuelle)               */

  unsigned short       ushIDDos;                    /* (autonome) ID du dossier                       */
  unsigned short       ushVersion;                  /* (autonome) Version de la structure             */
  enm( STATUT_DOSSIER) eStatut;                     /* (autonome) Une valeur SD_*                     */
  unsigned char        sPassword[ 15 + 1];          /* (autonome) Mot de passe du dossier             */
  dateDOS              dateCreationDossier;         /* (autonome) date de création du dossier         */
  char                 szCreationUser[ 15 + 1];     /* (autonome) Nom utl créateur du dossier         */
  dateDOS              dateDernModif;               /* (autonome) Date dernière modif du dossier      */
  char                 szDernModifUser[ 15 + 1];    /* (autonome) Nom utl dernière modif              */
  dateDOS              dateDernSauv;                /* (autonome) Date dernière sauvegarde du dossier */
  char                 szDernSauvUser[ 15 + 1];     /* (autonome) Nom utl dernière sauvegarde         */
  char                 szBRHDDFicName[ 12 + 1];     /* (autonome) Nom Fic sauvegarde sur HDD          */

  unsigned short              bSocieteFiliale;      /* 0/1/2 si inconnue/société Mère/Filiale */
  enm( FORME_JURIDIQUE)       eFormeJuridique;      /* SA, SARL.... */
  enm( REGIME_IMPOSITION)     eRegimeImposition;
  enm( CATEGORIE_IMPOSITION)  eCategorieImposition;
  enm( REGIME_FISCAL)         eRegimeFiscal;        /* Normal, Simplifié, Super simplifié */
  enm( COMPLMT_REGIME_FISCAL) eComplmtRegimeFiscal;
  enm( REGIME_BENEFICE)       eRegimeBenefice;

  char                 szCodeAPE[ 4 + 1];           /* Code APE                                      */
//  struct {
//    char sPrefixeIntracomm[ 4];                     /* Préfixe n° intracomm ( 2 char + 2 digit)      */
 /* char szSIRET[ 0];                                  N° SIRET (SIREN + NIC)                        */
//    char sSIREN[ 9];                                /* N° SIREN                                      */
//    char szNIC[ 5 + 1];                             /* N° NIC (Code établissement)                   */
//   }
  tagNOINTRACOMM       szNoIntracomm;               /* N° intracommunautaire du dossier (Pref+SIRET) */

  ADRESSE              adrSiegeSocial;              /* Adresse du siège social */
  ADRESSE              adrExN;                      /*    "    exercice  N     */
  ADRESSE              adrExNm1;                    /*    "       "     N-1    */

  short                bActiviteCommerciale;        /* Activité commerciale ? */
  short                bActiviteIndustrielle;       /*     "    indutrielle ? */
  short                bActiviteArtisanale;         /*     "    artisanale  ? */
  short                bActiviteAgricole;           /*     "    agricole    ? */
  short                bActiviteLiberale;           /*     "    libérale    ? */

  char                 szActivitePrincipale[ 31 + 1];
  char                 szActivitesSecondaires[ DOS_NB_ACTIVITES][ 31 + 1];

  short                bLoueurEnMeuble;             /* Activité de loueur en meublé                      ? */
  short                bPartStePersonnes;           /* Entreprise possède des part dans sté de personnes ? */
  short                bInteressement;              /* Intéressement des salariés                        ? */
  short                bParticipation;              /* Participation des salariés                        ? */
  short                bPlusieursEts;               /* Plusieurs établissements                          ? */

  short                bOptionDeductibiliteCongesApayer; /* Option pour deductibilité des congés à payer ?        */
  short                bAdhesionCGA;                     /*    Adhésion     à un CGA/AGA ?                        */
  dateDOS              dateAdhesionCGA;                  /* Date d'adhesion "  "    "                             */

  short                bExonerSexiesCGI;            /* Exonération entreprise nouvelle ? - art 44 sexies du CGI */
  short                bExonerSeptiesCGI;           /*      "          "         "     ? -  "   " septies    "  */
  short                bExonerZoneFrancheCorse;     /*      "          "         "     ? - Zone franche Corse   */
  short                bExonerZonesEntreprises;     /*      "          "         "     ? - Zones d'entreprises  */

  dateDOS              dateCreation;                /* Date de création de l'entreprise         */
  dateDOS              dateSituation;               /* Date de situation de la session en cours */
  dateDOS              dateDebEx;                   /* Dates exercice N, N-1 et N-2             */
  dateDOS              dateFinEx;
  dateDOS              dateDebExNm1;
  dateDOS              dateFinExNm1;
  dateDOS              dateDebExNm2;
  dateDOS              dateFinExNm2;
  dateDOS              dateDebNewEx;
  dateDOS              dateFinNewEx;

  unsigned short       uhLongueurComptes;           /* 0 = longueur variable */
  short                bIsCpt9CptClient;            /* TRUE/FALSE si comptes 9 = Comptes Clients/Fournisseurs */
  short                bIsCpt0CptFourn;             /* TRUE/FALSE si comptes 0 = Comptes Fournisseurs/Clients */

  unsigned short       uhIDRecetteImpot;            /* ID du RDI dont dépend le dossier (0=aucun; ancien ihIDCGI avant V4.04)=> TVA */
#ifdef __BCPLUSPLUS__
  DONNEES_ADM          DonneesAdm;                  /* Données administratives du dossier */
#else
  STRUCT_DONNEES_ADM
#endif
  unsigned short       bExonerZoneFrancheUrbaine;   /* Exonération entreprise nouvelle ? - zone franche urbaine */
  unsigned short       bCreeEnCorse208Sexies;       /* Exonération entreprise nouvelle ? - Entr. créée en Corse (208 sexies) */
  unsigned short       bCreeEnCorse208QuaterA;      /* Exonération entreprise nouvelle ? - Entr. créée en Corse (208 quater A) */

  unsigned short       bExNEuro;                    /* L'exercice  N  est-il en devise Euro ? */
  unsigned short       AncienbExNm1Euro;                  /*     "      N-1    "   "    "     "     */
  unsigned short       AncienbExNm2Euro;                  /*     "      N-2    "   "    "     "     */

  unsigned short       uhIDCentreImpot;             /* ID du CGI dont dépend le dossier (0=aucun; à partir de V4.04)=> Liasses fiscales */

  unsigned short       bExploitantAssujettiTVA;     /* Exploitant assujetti à la TVA? */
  ADRESSE              adrExploitation;             /* Adresse d'exploitation principale*/
  char                 szCodeTVA[ 20 + 1];          /* code TVA specifique Tunisie */
  ADRESSE              adrSiegeSocialNm1;           /* Adresse du siège social sur l'exercice N-1*/
  unsigned short       bComptaAnalytique;           /* Gestion d'une comptabilité analytique */
  char                 szEMail[512 + 1];            /* Adresse électronique du dossier */
  unsigned short       ushCodePays;                 /* Code pays du dossier */
  char                 szReference[LEN_REFERENCE + 1]; /* Référence du dossier (DEMAT'EXPERT) */
  char                 szCodeAPE_2008[5 + 1];          /* Code APE */
 } DONNEES_DOSSIER;
#pragma pack()

/**************************************************************************/
/*** Définition de la taille minimale des données étendues d'un dossier ***/
/**************************************************************************/
/* Cette taille est celle des données étendues pour REV'AO V 2.00 i.e. les champs  */
/* de DONNEES_DOSSIER du premier jusqu'à "bExonerZoneFrancheUrbaine". Cela permet */
/* d'allonger la définition de DONNEES_DOSSIER d'une version sur l'autre.         */
#define MIN_SIZEOF_DOSINFO 1040
#define _NbCodesRegimes 19
#define EXTERN_DEF_TAB_CODE_REGIME	extern const char *_cszCodeRegime[_NbCodesRegimes]
#define DEF_TAB_CODE_REGIME	const char *_cszCodeRegime[_NbCodesRegimes] = \
	{                                                          \
		"EM - R‚el mensuel",                                     \
		"ET - R‚el trimestriel",                                 \
		"RM - Mini r‚el mensuel",                                \
		"RT - Mini r‚el trimestriel",                            \
		"AM - Acomptes provisionnels mensuels",                  \
		"EO - BNC all‚g‚",                                       \
		"ES - Saisonnier",                                       \
		"RS - Mini r‚el saisonnier",                             \
		"ST - RSI - Simplifi‚ trimestriel",                      \
		"AET - R‚el trimestriel agricole",                       \
		"AST - RSA - Simplifi‚ agricole",                        \
		"NI - Non imposable",                                    \
		"EB - R‚el franchise",                                   \
		"SB - Simplifi‚ franchise",                              \
		"RFA - Remboursement forfaitaire agricole",              \
		"FBM - Franchise micro BA agricole",                     \
		"SA - Sans activit‚ (sommeil)",                          \
		"EA - Etablisement secondaire (pour m‚moire)",           \
		"RAT - TVA activit‚s cat‚gorielles distinctes",          \
	}
#define EXTERN_DEF_TAB_CODE_REGIME_COURT	extern const char *_cszCodeRegimeCourt[_NbCodesRegimes]
#define DEF_TAB_CODE_REGIME_COURT	const char *_cszCodeRegimeCourt[_NbCodesRegimes] = \
	{                                                      \
		"EM",              \
		"ET",              \
		"RM",              \
		"RT",              \
		"AM",              \
		"EO",              \
		"ES",              \
		"RS",              \
		"ST",              \
		"AET",             \
		"AST",             \
		"NI",              \
		"EB",              \
		"SB",              \
		"RFA",             \
		"FBM",             \
		"SA",              \
		"EA",              \
		"RAT",             \
	}



#endif // #ifndef EICDossiH

